from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework_simplejwt.views import TokenObtainPairView
from rest_framework.permissions import IsAuthenticated
from .models import User

# ------------ 自定义登录令牌生成 ------------
class CustomTokenObtainPairView(TokenObtainPairView):
    """
    生成JWT令牌，并返回用户权限信息
    - 继承自 TokenObtainPairView
    - 重写 get_token 方法添加自定义声明（用户权限）
    """
    def get_token(cls, user):
        token = super().get_token(user)
        # 添加自定义声明
        token['permissions'] = list(user.get_all_permissions())  # 获取用户所有权限
        return token

# ------------ 用户信息接口 ------------
class UserProfileView(APIView):
    """
    获取当前用户信息
    - 需登录后访问（IsAuthenticated权限控制）
    - 返回用户名、权限列表
    """
    permission_classes = [IsAuthenticated]  # 必须登录
    
    def get(self, request):
        user = request.user
        return Response({
            "username": user.username,
            "permissions": list(user.get_all_permissions())
        })